#include <stdio.h>

void test1()
{
    // c语言基础
    // 数据的机器级表示与处理
    // 数值数据的表示,非数值数据的表示,数据的存储,数据的运算
    // 1.数值数据的表示:定点数的编码表示,整数的表示,无符号整数,带符号整数,浮点数的表示
    // C语言整数类型和浮点数类型
    // 2. 非数值数据的表示,数据存储: 逻辑值,西文字符,汉字字符
    // 数据宽度单位,大小端,对齐存放
    // 3.数据的运算-->低层机器级的实现
    // 按位运算,逻辑运算,移位运算
    // 位扩展和位截断
    // 无符号和带符号整数的加减运算
    // 无符号和带符号整数的乘除运算
    // 常量与常数之间的乘除运算
    // 浮点数的加减乘除运算

    // 高级程序员解决的是业务逻辑,低级程序员解决的是数据的分布.

    // 数值数据的表示三要素: 进位计数值,定浮点表示,如何用二进制编码
    // 10进制10转成2进制 除2取余法,1010 -->2^0
    // 进制的理解:1010 = 1*2^3 + 1*2^1 = 8+2 =10
    // 10 = 1*10^1 + 0*10^0
    // 等式15*4=112,采用的进制是多少?
    // (1*x^1 + 5*x^0)*4 = 1*x^2 + 1*x^1 * 2
    // (x + 5)*4 = x^2 + x +2
    // x^2-3x -18 =0; (x-6)(x+3) = 0
}
void test2()
{
    // 整数采用补码来表示
    // 在一个模运算系统,一个数与它除以模后的余数等价
    // 一个负数的补码等于模减该负数的绝对值
    // 取模只留余数,高位1被丢弃,相当于低位数保留
    // 一个负数的补码等于对应正数的补码的各位取反,末位加1
    // 无符号数unsigned int (short/long) 带符号整数,int (short/long)
    // 若同时又无符号和带符号整数,c编译器则把带符号整数强制转换为无符号数,如比较
    // 如2147483647和2147483648: 1000 FFFFFFF
    // int l = -2147483647
}

void test3()
{
    // 标识符:字母,下划线,数字三种符号组成,第一个字符为字母或下划线,区分大小写
    int test10 = 10;
    int test8 = 012;
    int test16 = 0xA;
    printf("10 : %d,8 : %d,16 : %d\n",test10,test8,test16);
    //
    int iaaa;// 整形
    short int ibbb;// 短整型
    long int iccc;// 长整形
    unsigned int iddd;// 无符号型
    printf("int %d,short %d,long int %d,unsigned int %d\n",sizeof(iaaa),sizeof(ibbb),sizeof(iccc),sizeof(iddd));// 4 2 4 4
//    float 是浮点型,在计算机中浮点数运算必然是有精度的.
    // 对齐小数点就是浮点数的对阶
//    c90规范如vs2010编译器中的变量位置,在c90的时候,c语言和汇编是一一对应的,因此,在申明的时候,将所有的变量都写在前面,gcc很早就支持代码浮动了,直到c99标准规范,才正式支持代码浮动.
//    printf是库函数,基本形式%m.pX或者%-m.pX
// X:是个字母,表示数据输出时的类型,d输出为十进制数,e为指数形式,f是定点为10进制形式的浮点数,g指数形式的浮点数,c单个字符,s输出为字符串
    // m.p:m用来指定输出值的最小宽度,即输出字符的个数,
    // .p是用来指定输出精度,
    // -号,表示左对齐,缺省是右对齐

//    scanf("%d",&a);// & 不能省略
}
int main()
{
    test3();
    printf("Hello World!\n");
    return 0;
}
